/**
 * @Copyright (C) 2019 广州金鹏集团有限公司.
 * 本系统是商用软件,未经授权擅自复制或传播本程序的部分或全部将是非法的.
 * @创建人: 赵力
 * @创建时间: 2019-01-22 10:44
 * @版本: V1.0
 */
package io.renren.modules.neo4j.entity.base.abs;

import org.neo4j.ogm.annotation.GraphId;

/**
 * @类功能说明: 最基础的entity无论是节点还是关系都需要继承 提供最基础的 id属性，equals、hashCode方法
 * @创建人: 赵力
 * @创建时间: 2019-01-22 10:44
 */
public abstract class AllBaseEntity {

    /**
     * id 必须为Long类型，而且必须提供(节点和关系都需要)。且要加这个注解。
     * id 由图数据库统一操作，所以不需要setter
     */
    @GraphId
    public Long id;

    public Long getId() {
        return id;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }

        if (obj == null) {
            return false;
        }

        if (getClass() != obj.getClass()) {
            return false;
        }

        if (this.id == null) {
            // For newly created entity, id will be null
            return false;
        }

        AllBaseEntity entity = (AllBaseEntity) obj;
        return this.id.equals(entity.id);
    }

    @Override
    public int hashCode() {
        return id == null ? super.hashCode() : id.hashCode();
    }
}
